When a media file is published, it is typically encoded at different bitrates to accommodate varying bandwidth conditions. Every bitrate version may be sliced into segments. Each segment may be independently downloaded and played by a client. For every bitrate, a server may publish a set of bitrate playlists (e.g., a consecutive list of segments for a given bitrate) and a master playlist (e.g., a list of available bitrate playlists).
During playback, a client may select each consecutive segment based on available bandwidth. This may be done with the goal of maximizing visual quality (i.e., picking the segment with the highest bitrate), while providing an interruption-free experience (i.e., not picking segments that would take too long to download).
Such basic implementations may be well suited for streaming video that is encoded at Constant Bitrate (CBR). However, CBR is not an optimal way to encode video because different types of video scenes have different bandwidth requirements. For example, some sequences may need fewer bits to be encoded, such as sequences that include little motion. Conversely, some sequences need more bits to be encoded, such as in sequences with a lot of motion. Accordingly, various Variable Bitrate (VBR) encoding algorithms have been introduced. The VBR encoding algorithms vary an amount of output data per segment. That is, some segments may have a higher bitrate than other segments.
The media file may be encoded using VBR encoding algorithms based on different constraints. For example, different bitrate ranges may be used as constraints in encoding the video. For a single segment, each bitrate range used with the VBR encoding algorithm may generate an encoded segment at a different bitrate. For example, using a lower bitrate range as a constraint in the VBR encoding algorithm may produce an encoded segment of a lower bitrate than if a higher bitrate range is used.
After encoding using the VBR encoding algorithm, different bitrate playlists are created where each playlist contains segments from the corresponding encoded version of the media file. That is, each bitrate playlist is limited to the encoded segments that were generated using each specific bitrate range.